package com.qlk.test.vorder.service;

import java.util.List;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;

import com.qlk.common.utils.page.PageUtil;
import com.qlk.test.base.BaseTransactionTestCase;
import com.qlk.vorder.domain.Task;
import com.qlk.vorder.domain.query.TaskQuery;
import com.qlk.vorder.service.TaskService;
import com.qlk.vorder.utils.exceptions.ExistedException;

/**
 * TaskService单元测试
 * 
 * @author zhaoyanan
 * @version 2016-7-28 14:14:01
 * 
 */
public class TaskServiceTestCase extends BaseTransactionTestCase {

	/** 不存在的 ID-删改查-失败的测试用例 */
	private static final long TEST_NOT_EXIST_ID = -2L;

	/** 默认 存在的ID-删改查-成功的测试用例,数据库需存在改ID对应的数据 */
	private static final long TEST_DEFAULT_EXIST_ID = 1;

	@Autowired
	private TaskService taskService;

	/**
	 * 测试插入数据-成功
	 */
	@Test
	public void testInsert() {
		Assert.notNull(taskService);
		Task task = new Task();
		String ownSign = null; // TODO 初始化
		task.setOwnSign(ownSign);
		Integer queueId = null; // TODO 初始化
		task.setQueueId(queueId);
		// task.setCreateUser(TestConstants.UER_NAME);
		boolean result = taskService.insert(task);
		Assert.isTrue(result);
	}

	/**
	 * 测试插入数据-失败（重复、错误、长度越界等）
	 */
	@Test
	public void testInsertFailure() {
		Assert.notNull(taskService);
		Task task = new Task();
		String ownSign = null; // TODO 初始化// 已经存在的
		task.setOwnSign(ownSign);
		Integer queueId = null; // TODO 初始化// 已经存在的
		task.setQueueId(queueId);
		// task.setCreateName(TestConstants.UER_NAME);
		ExistedException ex = null;
		try {
			boolean result = taskService.insert(task);
			Assert.isTrue(!result);
		} catch (ExistedException e) {
			ex = e;
		}
		Assert.notNull(ex);
	}

	/**
	 * 测试删除数据-成功
	 */
	@Test
	public void testDelete() {
		Assert.notNull(taskService);
		Task task = new Task();
		task.setTaskId(TEST_DEFAULT_EXIST_ID);
		String ownSign = null; // TODO 初始化
		task.setOwnSign(ownSign);
		Integer queueId = null; // TODO 初始化
		task.setQueueId(queueId);
		// task.setCreateName(TestConstants.UER_NAME);
		boolean result = taskService.delete(task);
		Assert.isTrue(result);
	}

	/**
	 * 测试删除数据-失败（ID不存在等）
	 */
	@Test
	public void testDeleteFailure() {
		Assert.notNull(taskService);
		Task task = new Task();
		task.setTaskId(TEST_NOT_EXIST_ID);// 不存在的ID
		String ownSign = null; // TODO 初始化
		task.setOwnSign(ownSign);
		Integer queueId = null; // TODO 初始化
		task.setQueueId(queueId);
		// task.setUpdateUser(TestConstants.UER_NAME);
		boolean result = taskService.delete(task);
		Assert.isTrue(!result);
	}

	/**
	 * 测试修改数据-成功
	 */
	@Test
	public void testUpdate() {
		Assert.notNull(taskService);
		Task task = new Task();
		task.setTaskId(TEST_DEFAULT_EXIST_ID);
		String ownSign = null; // TODO 初始化
		task.setOwnSign(ownSign);
		Integer queueId = null; // TODO 初始化
		task.setQueueId(queueId);
		// task.setUpdateUser(TestConstants.UER_NAME);
		boolean result = taskService.update(task);
		Assert.isTrue(result);
	}

	/**
	 * 测试修改数据-失败（ID不存在等）
	 */
	@Test
	public void testUpdateFailure() {
		Assert.notNull(taskService);
		Task task = new Task();
		task.setTaskId(TEST_NOT_EXIST_ID);// 不存在的ID
		String ownSign = null; // TODO 初始化
		task.setOwnSign(ownSign);
		Integer queueId = null; // TODO 初始化
		task.setQueueId(queueId);
		// task.setUpdateUser(TestConstants.UER_NAME);
		boolean result = taskService.update(task);
		Assert.isTrue(!result);
	}

	/**
	 * 测试依据ID查询数据-成功
	 */
	@Test
	public void testQuery() {
		Assert.notNull(taskService);
		Task c = taskService.getTaskById(TEST_DEFAULT_EXIST_ID);
		Assert.notNull(c);
	}

	/**
	 * 测试依据ID查询数据-失败（ID不存在等）
	 */
	@Test
	public void testQueryFailure() {
		Assert.notNull(taskService);
		Task c = taskService.getTaskById(TEST_NOT_EXIST_ID);// 不存在的ID
		Assert.isNull(c);
	}

	/**
	 * 测试分页查询数据-成功
	 */
	@Test
	public void testQueryWithPage() {
		Assert.notNull(taskService);
		TaskQuery queryBean = null;
		PageUtil pageUtil = null;
		List<Task> list = taskService.queryTaskListWithPage(queryBean, pageUtil);
		Assert.notEmpty(list);
		logger.info("list size = " + list.size());
	}

	/**
	 * 测试查询数据集合-成功
	 */
	@Test
	public void testQueryList() {
		Assert.notNull(taskService);
		TaskQuery queryBean = new TaskQuery();
		String ownSign = null; // TODO 初始化
		queryBean.setOwnSign(ownSign);
		Integer queueId = null; // TODO 初始化
		queryBean.setQueueId(queueId);
		List<Task> list = taskService.queryTaskList(queryBean);
		Assert.notEmpty(list);
		logger.info("list size = " + list.size());
	}
}
